package com.cy.pj.common.pool.test;

import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/*
    创建一个对象池类型,然后将此类型的对象交给spring管理
    @Component //此注解描述的对象交给spring去管理,表示这个对象是一个一般组件
    系统底层会通过反射技术创建Bean实例,并为Bean起名字,默认bean对象的名字为类名,首字母小写

    反射? Java中的一种高级特性,这组特性会借助一组API,获取运行时的类的成员,并进行操作
    反射最大优势?不能预知未来,但可以驾驭未来.
    Java中应用反射的起点是什么? 获取Class对象(字节码对象)
 */
//@Lazy //描述对象类型时表示延迟对象的创建,何时需要何时创建
@Scope("prototype")
@Component
public class ObjectPool {   //默认bean对象的名字为类名,首字母小写

    public ObjectPool() {
        System.out.println("ObjectPool()");
    }
    //生命周期方法演示:(并不是每个类中都要写这样的方法,一般会在池对象的设计中写这样的方法)
    @PostConstruct  //此注解描述的方法为对象生命周期初始化方法,此方法会在构造方法之后执行
    public void init(){
        System.out.println("init()");
    }
    @PreDestroy //此注解描述的方法为对象生命周期销毁方法,此方法会在对象销毁之前执行
    public void destroy(){
        System.out.println("destroy()");
    }

}  //此类的配置在被加载到内存时,会将类的配置信息存储到Map<String,BeanDefinition>容器中
